import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

public class SmallChange {
    Scanner in = new Scanner(System.in);
    // 相关属性
    // 菜单部分相关变量
    boolean loop = true;  // 用于控制循环
    String key = "";  // 菜单选项

    // 零钱通明细相关变量
    String details = "=================零钱通明细=================";  // 展示明细

    // 收益入账相应的变量
    double money = 0;  // 入账金额
    double balance = 0;  // 余额
    Date date = null;
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");  // 日期格式化

    // 消费部分
    String note = "";  // 用于存储消费说明

    // 显示菜单
    public void mainMenu(){
        do{
            // 具体菜单
            System.out.println("=================选择零钱通菜单=================");
            System.out.println("\t\t\t\t1 零钱通明细");
            System.out.println("\t\t\t\t2 消费入账");
            System.out.println("\t\t\t\t3 消费");
            System.out.println("\t\t\t\t4 退出");

            System.out.println("请选择(1-4): ");
            key = in.next();
            switch (key){
                case "1":  // 零钱通明细部分
                    this.detail();
                    break;
                case "2":  // 收益入账
                    this.income();
                    break;
                case "3":  // 消费
                    this.pay();
                    break;
                case "4":  // 退出零钱通
                    this.exit();
                    break;
                default:
                    System.out.println("输入有误！");
            }
        }while (loop);
    }

    // 零钱通明细
    public void detail(){
        System.out.println(details);
    }

    // 收益入账
    public void income(){
        System.out.println("=================收益入账=================");
        System.out.println("收益入账金额: ");
        money = in.nextDouble();
        // 校验money范围
        if(money <= 0){
            System.out.println("入账信息有误！");  // 提示错误信息
            return;
        }
        balance += money;
        // 拼接入账信息到 details
        date = new Date();  // 获取当前日期
        details += "\n收益入账\t+" + money + "\t" + sdf.format(date) + "\t" + balance;
        return;
    }

    // 消费
    public void pay(){
        System.out.println("消费金额: ");
        money = in.nextDouble();
        // money 校验
        if(money <= 0 || balance < money){
            System.out.println("消费金额不正确或余额不足，无法进行消费！");
            return;
        }
        System.out.println("消费说明: ");
        note = in.next();
        balance -= money;
        // 拼接消费信息到 details
        date = new Date();  // 获取当前日期
        details += "\n" + note + "\t-" + money + "\t" + sdf.format(date) + "\t" + balance;
        return;
    }

    // 退出
    public void exit(){
        // 询问用户是否退出
        String choice = "";
        while (true){
            System.out.println("你确定要退出吗？y/n: ");
            choice = in.next();
            if("y".equals(choice) || "n".equals(choice)){
                break;
            }
        }
        // 用户输入 y 则退出, 输入 n 则不退出
        if(choice.equals("y")){
            loop = false;
        }
        return;
    }
}